
using System.Collections.Generic;
namespace Gltf
{
    public class MaterialPBRMetallicRoughness
    {

        public static string TypeName = "MaterialPBRMetallicRoughness";

        /**
         * @brief The factors for the base color of the material.
         *
         * This value defines linear multipliers for the sampled texels of the base
         * color texture.
         */
        public List<double> baseColorFactor = new List<double> { 1, 1, 1, 1 };

        /**
         * @brief The base color texture.
         *
         * The first three components (RGB) **MUST** be encoded with the sRGB transfer
         * function. They specify the base color of the material. If the fourth
         * component (A) is present, it represents the linear alpha coverage of the
         * material. Otherwise, the alpha coverage is equal to `1.0`. The
         * `material.alphaMode` property specifies how alpha is interpreted. The
         * stored texels **MUST NOT** be premultiplied. When undefined, the texture
         * **MUST** be sampled as having `1.0` in all components.
         */
        public TextureInfo baseColorTexture;

        /**
         * @brief The factor for the metalness of the material.
         *
         * This value defines a linear multiplier for the sampled metalness values of
         * the metallic-roughness texture.
         */
        public double metallicFactor = 1;

        /**
         * @brief The factor for the roughness of the material.
         *
         * This value defines a linear multiplier for the sampled roughness values of
         * the metallic-roughness texture.
         */
        public double roughnessFactor = 1;

        /**
         * @brief The metallic-roughness texture.
         *
         * The metalness values are sampled from the B channel. The roughness values
         * are sampled from the G channel. These values **MUST** be encoded with a
         * linear transfer function. If other channels are present (R or A), they
         * **MUST** be ignored for metallic-roughness calculations. When undefined,
         * the texture **MUST** be sampled as having `1.0` in G and B components.
         */
        public TextureInfo metallicRoughnessTexture;

        public static implicit operator bool(MaterialPBRMetallicRoughness foo)
        {
            return foo == null ? false : true;
        }
    }
}